{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Distributional Reinforcement Learning with Quantile Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import gym\n",
    "import torch\n",
    "import pickle\n",
    "import random\n",
    "import numpy as np\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "\n",
    "from logger import Logger\n",
    "from rl_utils import ReplayMemory, huber"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Network(nn.Module):\n",
    "    def __init__(self, len_state, num_quant, num_actions):\n",
    "        nn.Module.__init__(self)\n",
    "        \n",
    "        self.num_quant = num_quant\n",
    "        self.num_actions = num_actions\n",
    "        \n",
    "        self.layer1 = nn.Linear(len_state, 256)\n",
    "        self.layer2 = nn.Linear(256, num_actions*num_quant)  \n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.layer1(x)\n",
    "        x = torch.tanh(x)\n",
    "        x = self.layer2(x)\n",
    "        return x.view(-1, self.num_actions, self.num_quant)\n",
    "    \n",
    "    def select_action(self, state, eps):\n",
    "        if not isinstance(state, torch.Tensor): \n",
    "            state = torch.Tensor([state])    \n",
    "        action = torch.randint(0, 2, (1,))\n",
    "        if random.random() > eps:\n",
    "            action = self.forward(state).mean(2).max(1)[1]\n",
    "        return int(action)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "eps_start, eps_end, eps_dec = 0.9, 0.1, 500 \n",
    "eps = lambda steps: eps_end + (eps_start - eps_end) * np.exp(-1. * steps / eps_dec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[33mWARN: gym.spaces.Box autodetected dtype as <class 'numpy.float32'>. Please provide explicit dtype.\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "env_name = 'MountainCar-v0'\n",
    "env = gym.make(env_name)\n",
    "\n",
    "memory = ReplayMemory(10000)\n",
    "logger = Logger('q-net', fmt={'loss': '.5f'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "Z = Network(len_state=len(env.reset()), num_quant=2, num_actions=env.action_space.n)\n",
    "Ztgt = Network(len_state=len(env.reset()), num_quant=2, num_actions=env.action_space.n)\n",
    "optimizer = optim.Adam(Z.parameters(), 1e-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "steps_done = 0\n",
    "running_reward = None\n",
    "gamma, batch_size = 0.99, 32 \n",
    "tau = torch.Tensor((2 * np.arange(Z.num_quant) + 1) / (2.0 * Z.num_quant)).view(1, -1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  step    steps    running_reward     loss\n",
      "------  -------  ----------------  -------\n",
      "    50     4031            -200.0  0.00255\n",
      "   100    14031            -200.0  0.00045\n",
      "   150    24031            -200.0  0.00094\n",
      "   200    33024            -167.5  0.14040\n",
      "   250    41309            -155.1  1.39838\n",
      "   300    48949            -149.6  0.31419\n",
      "   350    57056            -172.1  0.23286\n",
      "   400    65674            -167.6  0.09095\n",
      "   450    73602            -171.0  0.08301\n",
      "   500    81153            -151.4  0.03264\n"
     ]
    }
   ],
   "source": [
    "for episode in range(501): \n",
    "    sum_reward = 0\n",
    "    state = env.reset()\n",
    "    while True:\n",
    "        steps_done += 1\n",
    "        \n",
    "        action = Z.select_action(torch.Tensor([state]), eps(steps_done))\n",
    "        next_state, reward, done, _ = env.step(action)\n",
    "\n",
    "        memory.push(state, action, next_state, reward, float(done))\n",
    "        sum_reward += reward\n",
    "        \n",
    "        if len(memory) < batch_size: break    \n",
    "        states, actions, rewards, next_states, dones = memory.sample(batch_size)\n",
    "        \n",
    "        theta = Z(states)[np.arange(batch_size), actions]\n",
    "        \n",
    "        Znext = Ztgt(next_states).detach()\n",
    "        Znext_max = Znext[np.arange(batch_size), Znext.mean(2).max(1)[1]]\n",
    "        Ttheta = rewards + gamma * (1 - dones) * Znext_max\n",
    "        \n",
    "        diff = Ttheta.t().unsqueeze(-1) - theta \n",
    "        loss = huber(diff) * (tau - (diff.detach() < 0).float()).abs()\n",
    "        loss = loss.mean()\n",
    "\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        state = next_state\n",
    "        \n",
    "        if steps_done % 100 == 0:\n",
    "            Ztgt.load_state_dict(Z.state_dict())\n",
    "            \n",
    "        if done and episode % 50 == 0:\n",
    "            logger.add(episode, steps=steps_done, running_reward=running_reward, loss=loss.data.numpy())\n",
    "            logger.iter_info()\n",
    "            \n",
    "        if done: \n",
    "            running_reward = sum_reward  if not running_reward else 0.2 * sum_reward + running_reward*0.8\n",
    "            break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Vizualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython import display\n",
    "%matplotlib inline\n",
    "\n",
    "from matplotlib import rcParams\n",
    "rcParams['figure.figsize'] = 8, 3\n",
    "rcParams['figure.dpi'] = 300"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "actions={\n",
    "    'CartPole-v0': ['Left', 'Right'],\n",
    "    'MountainCar-v0': ['Left', 'Non', 'Right'],\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_plot(q):\n",
    "    eps, p = 1e-8, 0\n",
    "    x, y = [q[0]-np.abs(q[0]*0.2)], [0]\n",
    "    for i in range(0, len(q)):\n",
    "        x += [q[i]-eps, q[i]]\n",
    "        y += [p, p+1/len(q)]\n",
    "        p += 1/len(q)\n",
    "    x+=[q[i]+eps, q[i]+np.abs(q[i]*0.2)]\n",
    "    y+=[1.0, 1.0]\n",
    "    return x, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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7NisNm3aHJrZ17lz5+Lnnntux9y5c1cnJiY6d+3aFXnllVd2KCwsDJkPup9++ukdO3bsWPr111+vf+6553ZccMEF+/2p/+abb2656667dh9//PFFsbGxVpLCwsLUrVu34smTJ28ZPHjwHkmaMWNGsr9LEzscDo0ZM6a1JJ1xxhn7p02blpmamuqUpI4dO5Z89tlnGzp16lTgdDr10EMPBTRAAPVfampqcefOnQtKB3OkVV6jfvnss88SH3/88daSdOqpp+b9/vvvK2+88cZcz4oWYWFhOuOMMw5Onz5903PPPbdZkjIyMhJuu+22Y4IZd1kvv/xys8zMzGhJeuWVVzZdf/31eyMj3RPju3XrVjx79uz1bdu2LSosLAyrif/D3NzcsOHDh7eNjIy0//rXvzZVtz00bJ06dSp+9913N5922ml5kvTFF18k7du376jMRzaE+80VV1yRu2HDhqXvvPNO5oUXXpiXkJBgJSkhIcFef/31e+fNm7c6JibGVVJSYp5++umUUGu/vjoqXzAAAAAAAADA0SYzMzNi2LBhaV26dOmWmJjYIzo6umfr1q1PuOqqq9pmZGQcMaMpLS3tBGNM+s8//5woSRMmTGhZdp/bWbNmJRpj0u+55552krR9+/Yo771w/dkfeezYsak5OTmRkjRp0qSNxx9/fFF515511lkHn3rqqUxJWrlyZdzEiROT/fx21JqIiNrdtfSPf/zjAcm9xHl2dnZ4ZdeX9cUXXyRu3749SpIefvjhHd7nY2Ji7PDhw7Mk6ddff01YsWJFje+hjdAXFhamxx57bJskzZ07N2n+/PlxgbTjcDj0wgsvJJ966qmdk5KSTvLsjX3eeed1mDVrVmJ59Xr16tXFc/9wuVx6/vnnm5144onHJSQknBwfH39yjx49jps4cWLTQJ/fyJEjW7tcLiUlJTk+/vjjDYmJieUOThoxYkTOn/70pxxJeuedd5qHyooEs2fPbiJJbdu2LbruuuuOWN47Ojra3n777VmS9PXXXzfJysry617hbfjw4a137NgRdeedd+485ZRTQnLJc4Sefv367ZOkkpIS42u1HM/7CGNMenlt/Pzzz7GDBw/u0KxZs5M871uuv/76Y7Zt2xZRlfoen376aeLZZ599bFJS0knR0dE9O3To0P3+++9vefDgwcMGwnna/Pjjj5Ml6eOPP072fm9T0f3LW0O43/Tu3bvA1xYIHscdd1zxH//4xzxJ+u233/xevae226+vavfdJAAAAAAAAFCOEqdLmXsONugEYZumccWR4cGfQ/Puu+82vvnmmzscPHgwTJIiIiJsZGSk3bZtW9QHH3zQbMaMGcnjx4/ffNddd+321ElKSnIUFRWF7du3L9zhcJjY2FhXXFzcoQ+eo6OjXcnJyY6ioiKTn58fHhYWpqSkJEfZfhMSEsr9QLasoqIi89577zWTpF69euUNHjw4r7I6d9xxx56nn3661ZYtW6LfeOONFkfLnu0LFy5MkKS4uDhXWlqao7Lry5o7d24jSYqPj3cNGDAg39c1l1122b67775bkvT555836tatW/39vjpLpNxNDfoeo6R2xQqv+S3Jr7rqqn3PP/98/qJFixJGjhzZ+qefflrjT/3du3eHn3/++R09A4DCw8MVFxfnzMnJiZwzZ07SnDlzkm699das119/fWt5bTidTg0cOLDjN9980yQ8PNzGxsa6Dhw4EP7777/H33nnne3Xrl0bM2HChO3+xDVv3rz45cuXx0nS0KFDs1u2bFnpa2jcuHE7pk+f3szlcumFF15o8eabb27xp8/asG3btihJOvbYYwvKu6Z79+6FkuRwOMwXX3zRaOjQobmB9PX5558nTJs2rXn79u0Ln3zyySMG/jQUJa4Sbc3b2qDvF60TWxdHhtX8/aI81v5vG3en0+n3SjlTpkxpctNNN3VwOBxGcv/ey8nJiZwyZUqL2bNnJ/3973/fVpV2HnnkkZQnnniiteR+X1JSUmI2btwYM378+FYLFy5M/P7779d4Bt953tvk5+eHFxUVmejoaOv9XiY6OrpKKxI1lPtNVURHR1tJcrlctbIiUm23H4pI4AMAAAAAACAoMvccjOr3/IITgh1Hbfrm/j5LOzZPKA5mDPPnz4+7/vrrO5aUlJhrrrlm1wMPPJB9wgknFEZERGjt2rVRjz32WOrUqVOb33vvvW1PPPHEgrPOOuugJC1btmyl5J4Nu2jRooTbb789a/z48Ycly3Jycn5/6aWXku+55552qampxdu2bVsaSIzfffddXH5+frgkXXzxxVVKMoWFhencc8/d+69//StlzZo1sTt37gz3LAff0OzevTt8+fLl0S+//HKLOXPmJEnSrbfemhUW5t/gkJUrV8ZKUocOHQrKWykgLS3NkZSU5MjNzY1Yvnx5bHVjD6rcTVF65ZQGfY/RXb8sVbNOtXKP+cc//rG1X79+x/3f//1f4kcffdToiiuuqPJ2ENdee23bn3/+OTEyMtKOGTNm6913352TmJjoyszMjPjrX/+a9uGHHzZ74403Ujp27Fj04IMP7vLVxuTJk1u4XC699NJLm4YOHbonISHBrl+/PvKWW25pO3/+/MYvvfRSyxtvvHH3CSecUO5qHd6++uqrQzNnr7766irda7p06VLctWvXg8uXL4/7/vvvqzzzti5UlMxyOv93O1yyZEmsJL8T+Pn5+WbYsGHtJGnixImbPdt6NERb87ZGXfTJRQ36fjHzkplL2zduX2fvSb755pvGkmSMUefOnav8OpWkFStWRN12223tHQ6H6dat28HXXntt85lnnnnQ5XJp5syZiXfeeWe7Rx55pNJl5letWhWbkZGRMGzYsJ2jRo3KatmypWPPnj1h48aNS33hhRda/t///V/iK6+8knzvvffulqQBAwYcyMnJ+f3yyy9v9/HHHydfcMEFe6ZPn74pkOff0O435SkqKjIZGRkJknTccccdrG/th6rgD/8FAAAAAAAAUGvuvvvutiUlJeaee+7ZMW3atMyTTz650JO87dSpU/Hbb7+decMNN2Q7nU7z2GOPtQxGjKXJJUnSKaecUuUPZ3v06HFQcs/y++WXXw5b5vvyyy9v573srT+Pmnt2gXnjjTeSPLE0a9asR58+fbp+9NFHyVFRUXbYsGE7n332Wb9mHktSVlZWpCSlpqaWVHRdSkpKiSTt3Lmz7qZqIuScc845BwYMGLBXkh555JHWLleVJp1q/vz5cXPnzk2SpCeffDJz1KhR2Z5lo9u0aeP44IMPNg8aNChXkp566qlW3ktYe+zfvz982rRp64cPH77bsydyx44dSz7//PP1zZs3L3G5XJo6dWqSP89pxYoVsZIUGRlpe/bsWeWl4Lt3735QktavXx9bNjEu/W+7kUAevXr16uJP/B6tW7cukqQ1a9bElvf/Uva+umPHjoBey/fdd19aZmZm9NVXX73r3HPP9blqB+Bt7dq1Uddcc03bn376KVGS+vbtu9ffAXaPPvpoy8LCwrCmTZs65s2bt+bMM888KLkH711yySV5X3zxxZrCwsJKc5x5eXnh99xzz45XXnllm2cGfNOmTV0TJkzYPnDgwL2S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vDl67Nixx4wdO/aY+Ph4l8vlUkFBwaFYk5KSHP/+9783XnrppSG1zPu6deuijjvuuBN8nRsyZEjHsscvvvjiprL7zzocDjNz5symM2fObCpJcXFxrqioKFd+fn64w+E4lOy/4IILct97771NgcR38803565YsWLHhAkTWr7zzjvNp02b1jwhIcHpWUEhPDzcPvPMM5n9+/evs2XNUX8MHz485+WXX07ZuHFjhQmtd955Z/N5550XuWjRooRRo0a1GT169DHx8fGuvLy8cM+S1LfeemvWgw8+uKtOAvfy+OOPZ6WkpDhGjRp1zMaNG2NuuummDjfffLMSExOdBQUFYSUlJYdeb926dTv44Ycfru/YsWNIJZQWLFiQ+M033zSR3NuQREZGuvLz8w8N/Lnyyitzpk6dujl4EQLSH/7wh8Jzzjln7zfffNNk/PjxLYcPH54TGxtb6aCd7t27F02cOHHTLbfc0n758uVxZ5xxRrf4+HiX0+lUYWFhWIsWLUrGjRu35Z577mkXFRVV44OAhgwZkvv444+n5ebmRvTs2bN7kyZNHHFxcS5JmjJlyoZ+/fpV+Xdkfb/fPProoy137doVKUk5OTmR6enp3Sq6Picn5/dQar++YgY+AAAAAAAA0MBdeuml+9euXbts5MiR23r27JlfmrCNCAsLU8eOHQuvvPLKnHfeeWfdm2++mRlI+zNnzlx/0003ZbVt27bI4XCY7du3R23fvj0qkP1WzzrrrINr165d9sorr2wcOHDg3latWhU7nc7DkvennXba/tWrVy8LteR9dd1xxx05jz/++JaBAwfubd++fWFkZKTNy8uLiImJcXXq1KngmmuuyZkzZ87qWbNmbajOrOXx48dv//TTT9f0799/b9OmTR2eZMiFF164Z/78+atGjBjh90AOHB0iIiI0duzYbZVdl5yc7Pzhhx9WT5gwYVOvXr3y4uPjXQcPHgxr1qxZyaBBg3I/++yzNa+//npQV3kYPnz47vXr1y/9+9//vvWPf/xjXnJycsmBAwcOS6bdcccdO3/77beVobidxK233rrr0ksv3V16r3CVlJSEpaWlFV966aW758yZs/r999/fHBkZGewwAT3yyCM7JCkrKyvy+eefb17VekOHDs397rvvVp533nm5SUlJjuLiYpOcnOwYOnRo9uLFi1c0adLEKf1vufua1Lx5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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12572a278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12572a278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "state, done, steps = env.reset(), False, 0\n",
    "while True:\n",
    "    plt.clf()\n",
    "    steps += 1\n",
    "    action = Z.select_action(torch.Tensor([state]), eps(steps_done))\n",
    "    state, reward, done, _ = env.step(action)\n",
    "    \n",
    "    plt.subplot(1, 2, 1)\n",
    "    plt.title('step = %s' % steps)\n",
    "    plt.imshow(env.render(mode='rgb_array'))\n",
    "    plt.axis('off')\n",
    "\n",
    "    plt.subplot(1, 2, 2)\n",
    "    Zval = Z(torch.Tensor([state])).detach().numpy()\n",
    "    for i in range(env.action_space.n):\n",
    "        x, y = get_plot(Zval[0][i])\n",
    "        plt.plot(x, y, label='%s Q=%.1f' % (actions[env_name][i], Zval[0][i].mean()))\n",
    "        plt.legend(bbox_to_anchor=(1.0, 1.1), ncol=3, prop={'size': 6})\n",
    "    \n",
    "    if done: break\n",
    "    display.clear_output(wait=True)\n",
    "    display.display(plt.gcf())\n",
    "    plt.savefig('img/%s.png' % steps)\n",
    "plt.clf()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
